﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace Javavaj.iHunter
{
    /// <summary>
    /// 表示一条信息
    /// </summary>
        public interface IMessage : System.Xml.Serialization.IXmlSerializable
        {
            //这些属性，按照需要使其只读

            /// <summary>
            /// 获取消息Id
            /// </summary>
            int Id { get; }

            /// <summary>
            /// 消息唯一标识
            /// </summary>
            int Uid { get; set; }

            /// <summary>
            /// 获取信息所属的频道的HashCode
            /// </summary>            
            int ChannelHash { get; }

            bool Read { get; set; }

            /// <summary>
            /// 获取或设置信息标题
            /// </summary>
            string Title { get; set; }
            /// <summary>
            /// 获取或设置信息的原始链接地址
            /// </summary>
            string Link { get; set; }
            /// <summary>
            /// 获取或设置信息的描述(摘要)
            /// </summary>
            string Description { get; set; }

            /// <summary>
            /// 获取或设置信息的发布时间
            /// </summary>
            DateTime PubTime { get; set; }

            /// <summary>
            /// 获取或设置信息的最后修改时间
            /// </summary>
            DateTime LastBuildTime { get; set; }

            /// <summary>
            /// 获取或设置信息的最后有效期限
            /// </summary>
            DateTime DueTime { get; set; }

            /// <summary>
            /// 获取或设置信息的作者
            /// </summary>
            string Author { get; set; }

            /// <summary>
            /// 获取或设置信息所属的类别
            /// </summary>
            string Category { get; set; }

            /// <summary>
            /// 获取或设置信息的重要级别
            /// </summary>
            int Importance { get; set; }

            /// <summary>
            /// 获取或设置消息是否可以被回复或提交附件
            /// </summary>
            bool Repliable { get; set; }

            /// <summary>
            /// 获取或设置信息的内容
            /// </summary>
            /// <remarks>
            /// 若正文为文本格式(ContentIsBinary为“假”(False)，则返回值为string对象；若正文为二进制格式，返回值为byte[]对象
            /// 在设置该值时，可以接受的对象类型为String, StringBuilder, byte[], 或者类型参数为byte的IList的泛型接口
            /// </remarks>
            object Content { get; set; }
            
            /// <summary>
            /// 获取或设置信息的附件
            /// </summary>
            /// <returns>返回IFileObject对象的ICollection集合；没有附件则返回null</returns>
            IList<IFileObject> Attachments { get; set; }

            /// <summary>
            /// 获取或设置内容正文文档类型
            /// </summary>
            string ContentType{get;set;}

            /// <summary>
            /// 获取一个布尔值，表示正文是否为二进制数据
            /// </summary>
            bool ContentIsBinary { get; }

            bool Deleted { get; set; }
            bool Spam { get; set; }

        }
    }
